home *** CD-ROM | disk | FTP | other *** search
- / _
- /-------------------_
- / オブジェクトコレクション2 for GCC _
- _ /
- _-------------------/
- _ by SAKU /
-
-
- Chapt.1 ご挨拶
-
- あーっ。あーっ。本日は晴天なり。テス、テス。只今マイクのテスト中。
- ...マイクおっけー。じゃー、フリコレ11用のご挨拶から始めましょう
- かー。...あれ、みんなどうしたの。...えっ、もう始まっているって!
-
- (気を取り直して)どうも、今日は。わたしが、皆様をご案内するSAKUと
- いいます。今回のフリコレ11には、簡易修飾印刷プログラム「源二郎」と
- この「オブジェクトコレクション2」を応募しました。ここでは、「オブジェ
- クトコレクション2」について、使用方法、注意などをゲストの方々ととも
- に解説していきたいと思います。
-
- Chapt.2 ゲスト紹介
-
- それではゲストを紹介します。ますはじめに、Uさんです。趣味は、薬の
- 合成、テレビ鑑賞だそうです。ちょっとおせっかいで、よく、問題をおこし
- ます。ちょっとタカピーで、失礼な事を言うこともあるでしょうが、おおめ
- に見てやってください。
- 次に、Bさん。趣味は、お茶を飲むことだそうです。今回の3人のゲスト
- のなかでは最もバランスのとれた方です。この方が、いろんな問題を解決し
- てくれるでしょう。
- 最後にSさん。趣味は、機械等の製作で、ハードとソフトどちらもこなす
- 素晴らしい方です。しかし、ちょっとわがままで子供っぽいので、頼りない
- ですね。
- 以上で、ゲストの紹介を終わります。
- ...ゴゴゴゴッ、ドカーン(雷の音、爆発音)...
- U) あれ、司会者のSAKUが倒れちゃったよ。なにか悪い持病でも持ってた
- のかな。それじゃ、これからはわたしが仕切って、解説を進めていくわ
- よ。おーっほほほ。
-
- Chapt.3 概略
-
- U) 今回の「オブジェクトコレクション2」には、7つのオブジェクトが
- 収録されているのよ。なんか私だけしゃべってたんじゃ悪いから、Sに
- 少ししゃべらせてあげるわ。ほら、S、7つのオブジェクトの簡単な説
- 明をしなさい。
-
- S) なによ、U、勝手に仕切っちゃて。本当は、よくわからないから、私
- に振ったんでしょ。まあいいわ。ここは、機械の事なら何でも任せての
- 天才Sさまがびしっと決めてあげるわ。
-
- ┌─────┬───────────────┬────┐
- │ファイル名│主な機能 │ Chapt. │
- ├─────┼───────────────┼────┤
- │button │ボタンの制御、管理 │ 4 │
- │filesel │ファイルの選択 │ 5 │
- │sort │整数、文字列配列の順位を調べる│ 6 │
- │strin │文字列入力 │ 7 │
- │symbol │文字列出力 │ 8 │
- │value │文字列の数値化 │ 9 │
- │vircon │仮想コンソール画面 │ 10 │
- └─────┴───────────────┴────┘
-
- 簡単な表にするとこんなもんね。これでどうかしら、お姉さま。
-
- B) ええ、素晴らしい出来だわ。
-
- S) そうでしょ。
-
- U) なにいってんのよ。こんなに簡単な説明じゃ、全然わからないじゃな
- い。B、あんまりSを調子に乗せないでよ。
-
- S) Uこそなにバカなこといってんのよ。詳しくはあとで別々に解説する
- から、今はこれくらいでちょうどいいのよ。これだから素人は困るのよ。
-
- U) 私はそんな口をきく妹に育てた覚えはないよ。
-
- S) 私はUに育てられた覚えはないわよ。
-
- ...ゴゴゴゴッ、ドカーン(落雷と爆発の音)...
-
- B) それでは、次にいきましょうか。
-
-
- Chapt.4 button について
-
- U) ゲホゲホ...えーっ、これの主な機能は、読んで字の如く「フトン」
- が少し変化して「ブットン」と読み、あなたの察するとおり、フトンが
- より寝やすく改良された物で、現在実用特許登録申請中...
-
- B) U、うそはいけませんよ。そんな事言って、これを見ている人が勘違
- いをしたら大変でしょ。
-
- U) ごめん、ごめん。つい。そうだ。B、あんたまだあんまりしゃべって
- ないんだからここの解説をしなさいよ。
-
- B) ええ、それではこの章は、わたしが解説いたします。
-
- 【機能 】簡単なボタンの制御をする。(16色)
- 【ソース】button.c
- 【ヘッダ】button.h
- 【関数 】
- ○ BT_init( char *egbwork )
-
- B) この関数は、ボタン制御に関する初期化をするもので、他のボタン制
- 御関数を呼び出す前に、実行する必要があります。
-
- ・引数 char *egbwork: EGB-BIOSワークエリアのポインタ
- ・戻値 なし
-
- ○ BT_create( int type, int bx, int by, int dx, int dy, char *mes )
-
- B) この関数では、ボタンを製作して、そのボタン番号を返します。この
- ボタン番号は、ボタン制御において必須なので、きちんと変数に格納し
- てください。それと、作れるボタンは16個までなので、いらなくなっ
- たボタンは、 BT_disappear 関数で、消去してください。
-
- ・引数 int type : ボタンの表示(非表示:0 表示:1)
- int bx,by: ボタンの左上の座標
- int dx,dy: ボタンの大きさ
- char *mes: ボタンに表示する文字列(NULLのときは無地のボタン)
-
- ・戻値 0-15: 作ったボタンのボタン番号[※重要]
- -1 : ボタンが16個以上作られている。
-
- ○ BT_getStatus( int num, int *state )
-
- B) ボタン番号 num のボタンの表示状態を state に返します。
-
- ・引数 int num : ボタン番号
- int *state: 表示状態を格納する変数のポインタ
-
- ・戻値 0 : 正常終了
- not 0: ボタン番号 num のボタンは存在しない。
-
- ○ BT_reverse( int num, int in )
-
- B) ボタン番号 num のボタンの表示状態を変更します。
-
- ・引数 int num : ボタン番号
- int in : 表示状態の変更方法
- (0:通常 1:反転 2:現在の状態と逆にする)
-
- ・戻値 0 : 正常終了
- not 0: ボタン番号 num のボタンは存在しない。
-
- ○ BT_disappear( int num )
-
- B) ボタン番号 num のボタンを削除します。削除しても、グラフィック画
- 面を復元しませんので、お手数を掛けますが、ユーザーが各自、処理し
- てください。
-
- ・引数 int num : ボタン番号
- ・戻値 0 : 正常終了
- not 0: ボタン番号 num のボタンは存在しない。
-
- ○ BT_check( int num, int cx, int cy )
-
- B) マウスカーソルがボタン番号 num のボタンの範囲に有るかどうかを
- 調べます。
-
- ・引数 int num : ボタン番号
- int cx,cy : マウスカーソルの位置
- ・戻値 BTC_ON : マウスカーソルはボタンの範囲内にある。
- BTC_OFF: マウスカーソルはボタンの範囲内にない。
- 1 : ボタン番号 num のボタンは存在しない。
-
- 【補足 】
- U) B、ごくろうさま。それじゃ、わたしがちょっと補足を。
-
- まだ、ボタンの文字色や背景色などが変更できなかったり、グラフィッ
- クの退避をしていなかったりで、見栄えが単調で見た目が情けないけど、
- 取り合えず[源二郎]にこのオブジェクトを使ってるんで、応募したん
- だってっさ。まあ、おおめに見てやってよ。
-
- それと、これをリンクするときは、symbol.o も一緒にリンクするんだ
- よ。内部でこのオブジェクトの関数を使ってるからね。
-
- B) 16色専用って事も覚えておいてくださいね。
-
-
- Chapt.5 filesel について
-
- U) それじゃ、次はわたし...
-
- S) わたし、わたし、わたしーっ。つぎはわたしが解説するのよ。
-
- U) なにいってんのよ。あんたはChapt.3をやらせてあげたでしょ。
-
- S) いやいやいや。わたしがやるったらやるんだもん。
-
- U) あんた、さっきのケンカで、顔が汚れてるわよ。そんな顔で解説して
- あんたの格が落ちてもしらないわよ。
-
- S) えーっ。そんなー。(S、鏡の前へダッシュ。)
-
- U) ふっ、勝ったわ。それじゃここはわたしが解説するわよ。そこのディ
- スプレイの前のあんた。ありがたく、正座してお読み!
-
- 【機能 】GUIによるファイル名取得をする。(16色)
- 【ソース】filesel.c fsdat.c
- 【ヘッダ】filesel.h
- 【関数 】
- ○ FS_fileSelect( char *egbwork, char *wild, char *path )
-
- U) この関数で、ファイル名を取得することができるのよ。ファイルセレ
- クタの位置を変えたきゃ、この関数を実行する前に FS_locate 関数で
- 位置を指定するのよ。
- あと、ワイルドカードだけど、例えば"*.*"や"*.exp"のようにするん
- だよ。"/*.*"や"\bin\*.exe"のようにはしちゃだめだよ。
- path は、十分なサイズを用意しないと、とんでもないことが起きる
- かもよ。
- それと、ユーザーが右クリックをすると、関数が異常終了するから、
- そのへんも考えに入れてプログラムするんだよ。
-
- ・引数 char *egbwork: EGB-BIOSワークエリアのポインタ
- char *wild : ワイルドカードの文字列
- char *path : ファイル名を格納する文字列
-
- ・戻値 0: 正常終了
- 1: 右クリックによる入力拒否
-
- ○ FS_locate( int x, int y )
-
- U) これはファイルセレクタの位置を変える関数で、きちんと範囲内に指
- 定しないと、おこるわよ。
-
- ・引数 int x,y: ファイルセレクタのグラフィックの左上の座標
- ( 0 <= x <= 511, 0 <= y <= 263 )
-
- ・戻値 0: 正常終了
- 1: 座標指定が適切な範囲内にない
-
- 【補足 】
-
- U) これは、なかなか使えるプログラムだと思うよ。
-
- B) そうですね。前回もこのファイルセレクタは応募したけど、フロッピ
- ーが入ってない状態でAドライブやBドライブにアクセスすると、止まっ
- てしまいましたからね。でも今回のは、ドライブにフロッピーが入って
- なくても、きちんとスキップして、つぎのドライブをアクセスしにいき
- ますから、ちょっと待たされますけど、止まることはなくなりました。
-
- U) あれーっ。でも、CD-ROMドライブが読めないし、DOSフォー
- マットでないフロッピーを入れて読みにいくと、止まっちゃうよ。
-
- B) それは、DOSの int 25H をディスクのチェックに使っているからな
- なんですが、対応策は今のところないそうです。ごめんなさい。
-
- あと、これをリンクするとき一緒に symbol.o もリンクしてください。
-
- U) これも16色専用だってさ。
-
-
- Chapt.6 sort について
-
- S) 次は、わたしが解説をするわよぉ。いいわね、U。いいですよね、お
- 姉さま。
-
- B) ええ。いいですよ。
-
- U) (...くっ。この生意気娘が。)まあいいわ。それじゃ、わたした
- ちは、「みんなのTeaRoom」で、お茶でも飲んでいようかね、B。
-
- B) そうですね。ここはSにまかせて、そうしましょうか。
-
- S) ええっ。お姉さまもいっちゃうの。
-
- U) なによ、やっぱり一人じゃ何もできないので。まだまだ子供ね。
-
- S) (ムカッ。)フン、わたしひとりでできるもん。Uなんか、もう戻っ
- てこなくていいわよ。
-
- U) それじゃいこうか、B。
-
- B) ええ。それじゃS、がんばってね。
-
- S) それじゃ、はじめるわよ。
-
- 【機能 】整数、文字列の配列のソート順を出力する。配列を書き換えるこ
- とはしない。
- 【ソース】sort.c
- 【ヘッダ】sort.h
- 【関数 】
- ○ sort( int sorttype, int argtype, void *data, int n, int *retlank )
-
- S) このオブジェクトにはこの関数しかないわよ。まあ、それも当然だけ
- どね。文字列の時は、ポインタのポインタを渡すのよ。...って、よ
- けいにややこしいけど、よくわからないときはサンプルをみてね。
-
- ・引数 int sorttype: ソートの方法
- SORT_BUBBLE: バブルソート法
- SORT_SHELL : シェルソート法(速い)
- int argtype : ソートする変数の型
- SORT_CHAR : char(1Byte)
- SORT_SHORT : short(2Byte)
- SORT_LONG : long(4Byte)
- SORT_STR : 文字列
- void *data : ソートする配列のポインタ
- int n : 配列の要素数
- int *retlank: 順位を格納する(要素数 n の)配列
-
- ・戻値 なし
-
- 【補足 】
-
- S) なぜソートの方法が二つあるのかって、疑問に思う人もいるでしょう。
- これは、オブジェクト指向のまねごとをしたかったのよ。実際は、速い
- シェルソートしか使わないんだけどね。
-
- それとね、ソートする変数の型は、注意してね。GCCではint型
- は、4Byteだけど、LSI-Cとかは、2Byteだからね。とい
- うことは、このプログラムは再コンパイルすれば、いろんなCに使えるっ
- て事だね。ああ、なんて高い汎用性。
-
- U) もう終わったかい、S。
-
- S) もちろんよ。わかりやすくまとまったこの文章。ああっ、わたしって
- 天才。
-
- B) そうですね、もうひとつ注意すべきことは、この関数では実際にデー
- タに書き込まずに、別の配列に順位の番号を格納しているんですね。だ
- から実際にデータを並び変えたいときは、ユーザーが書き換えてくださ
- い。
-
- U) まだまだ詰めが甘いわね、S。
-
- S) うっ。わたしならそんなことサンプル見ればわかるもん。
-
- B) そのサンプルを見ない人がいるかもしれないでしょう。
-
- U) そういう事よ。まだまだそんなんじゃ、一人で解説は難しいようだね。
-
- S) うっ。
-
-
- Chapt.7 strin について
-
- U) さて、次は私が解説するよ。S、あんたはもう出番がないだろうから、
- 自分の部屋に帰って寝たら。
-
- S) なによ。まだわたしの出番はあるわよ。それにUのフォローもあるし。
-
- U) ほーっほほほ。何を言うかと思えば。わたしはSにフォローされるほ
- どあまかないよ。だまって私の解説を聞いて、手本になさい。
-
- 【機能 】グラフィック画面での文字列の入力をする。(16色)
- 【ソース】strin.c strindat.c
- 【ヘッダ】strin.h
- 【関数 】
- ○ ST_locate( int x, int y )
-
- U) この関数では、文字列入力のグラフィックの左上の座標を指定してね。
- そのとき変な値をセットしたら、おしおきだよ。
-
- ・引数 int x,y: 表示する左上の座標
- ( 0 <= x <= 367, 0 <= y <= 433 )
-
- ・戻値 0: 正常終了
- 1: 座標設定が適切でない
-
- ○ ST_inputStrings( char *egbwork, char *str, int n, const char *mes )
-
- U) この関数は、実際に文字列を入力してもらって、その文字列を得る関
- 数だよ。ユーザーが[ESC][取消]などで入力を拒否するかもしれないから
- 戻値をきちんとチェックして、それなりの対応をするんだよ。いいね。
-
- ・引数 char *egbwork: EGB-BIOSワークエリアのポインタ
- char *str : 文字列を格納する配列のポインタ
- int n : 入力する文字列の最大サイズ
- char *mes : 表示するメッセージ
-
- ・戻値 -3: [ESC][取消]による入力の拒否
- その他: 入力された文字列のサイズ。何も入力されないときは、0。
-
- 【補足 】
-
- U) どお、わたしの解説は。ためになったでしょ。
-
- S) なによ。このプログラムはほとんど注意するところがないじゃない。
-
- B) そうでもないですよ。文字列を格納する配列は十分な容量を確保し
- て、入力文字列の最大サイズがこの容量より小さくないと、バクの原
- 因になりますよ。
-
- U) さすが、B。よく気付いたね。ちょっとSを試そうとして、わざと
- 言わないで置いたんだけど、やっぱりSは気付かなかったわね。
-
- B) あと、これをリンクするとき一緒に symbol.o もリンクしてください。
-
-
- Chapt.8 symbol について
-
- U) これとこの次の関数は、前回も応募したし、大きな変更もないから
- ほとんど説明することがないだろうからB、あんたに2つ任せるわ。
-
- B) いいんですか、わたしが2つも解説してしまって。
-
- S) お姉さまならいいわよ。
-
- B) それじゃ、わたしが解説するわ。
-
- 【機能 】グラフィック画面への文字列の出力をする。
- 【ソース】symbol.c
- 【ヘッダ】symbol.h
- 【関数 】
- ○ symbol( char *egbwork, int x, int y, char *str )
-
- B) EGB_putSjis関数にバグがあったので、この関数を作りました。
-
- ・引数 char *egbwork: EGB-BIOSワークエリアのポインタ
- int x,y : 文字表示の基準線の左端の座標
- char *str : 表示する文字列
-
- ・戻値 なし
-
- 【補足 】
-
- B) この関数は、他のオブジェクトでよく使われているから、このオブジェ
- クトは、よく一緒にリンクするするようになります。
- あと、指定する座標に注意してくださいね。
-
-
- Chapt.9 value について
-
- B) 引き続きわたしが解説します。
-
- 【機能 】文字列を計算して、倍精度実数型で出力する。
- 【ソース】value.c
- 【ヘッダ】value.h
- 【関数 】
- ○ calcvalue( const char *str, double *ans )
-
- B) この関数は、文字列に書いてある計算式を計算して、答えを倍精度実
- 数型で出力します。計算式が間違ってて、計算できない場合もあるので
- 注意してくださいね。
-
- ・引数 char *str : 計算する文字列
- double *ans : 答えを格納する倍精度実数型の変数のポインタ
-
- ・戻値 0 : 正常終了
- 1 : 計算できない(文法上、計算上)
-
- 【補足 】
-
- B) この関数は、10進数の他に、数字の初めが "0x" なら16進数とし
- て計算してくれます。また数学的に計算できない式は、やめてください
- ね。例えば0で割るとか。
-
-
- Chapt.10 vircon について
-
- U) さーて。最後の章は当然長女であるこの私がびっしっとしめるわよ。
-
- 【機能 】グラフィック画面での printf 関数相当のことを実現する。
- 【ソース】vircon.c
- 【ヘッダ】vircon.h
- 【関数 】
- ○ VC_init( char *work, int bx, int by, int w, int l, int fc, int bc )
-
- U) まず初めにこの関数を実行して、いろんな設定をするんだよ。まあ、
- 文字の色、背景色は後で変えられるけどね。これを実行した時に、画面
- も、書かれるよ。
-
- ・引数 char *egbwork: EGB-BIOSワークエリアのポインタ
- int bx,by : 表示画面の左上
- int w : 表示の桁数(半角で)
- int l : 表示の行数
- int fc : 表示の文字色
- int bc : 背景色
-
- ・戻値 なし
-
- ○ VC_cls()
-
- U) これは、コンソールのエリアをクリアする関数だよ。
-
- ・引数 なし
-
- ・戻値 なし
-
- ○ VC_setWriteColor( int fc )
-
- U) これは、文字を表示する色を設定する関数だよ。これにだけじゃなく
- て、全体に言えることなんだけど、エラーチェックが甘いから、各自で
- 気をつけてね。
-
- ・引数 int fc : 表示文字の色
-
- ・戻値 なし
-
- ○ VC_setBackColor( int bc )
-
- U) これは、背景色を設定する関数ね。
-
- ・引数 int bc : 背景色
-
- ・戻値 なし
-
- ○ VC_locate( int x, int y )
-
- U) これは、現在のコンソールの書き込み位置をを設定する関数ね。
-
- ・引数 int x,y: 表示画面内の現在位置の桁数と行数
-
- ・戻値 なし
-
- ○ VC_printf( char *fmt, ... )
-
- U) これは、printf 関数のような働きをするんだけど、かなり低機能なん
- だ。%sと%dしか使えなくてしかもその桁数などの設定もできないんだ。
- それと引数がちょっと面倒で、先にその引数の型を示してから、目的の
- 引数を渡すから、因数の数が、約2倍になっちゃうんだよ。
-
- ・引数 char *fmt : 書式
- ... : 書式で%s,%dが使われたときに必要な引数
- 引数の型 : S_INT short int
- : US_INT unsigned short int
- : L_INT long int
- : UL_INT unsigned long int
- : CHAR char
- : POINTER char *(ポインタ)
-
- ・戻値 なし
-
- 【補足 】
-
- U) ちょっと、各関数の説明をはしょっちゃってごめんね。ちょっとわた
- しも疲れてきたのよ。まあ、読んでるあんたの方が疲れてるかもしれな
- いけどね。
- これも、リンクするときは、いっしょに symbol.o もリンクしてね。
- それと注意点といえば、引数の型を正しく設定することぐらいかね。
-
-
- Chapt.11 サンプルについて
-
- B) 作者がデバッグがてらにつくったサンプルプログラムも一緒に応募し
- ます。なにか参考になれば、幸いです。
-
- S) なによ。自分でコンパイルしようとしたけど、うまくいかないわよ。
-
- U) そんなあなたに。U姉さんのワンポイントアドバイス。まず、インク
- ルードファイルで、GCCにはないはずの<egb.h>などが書いてあるけど
- それは、作者が自分でライブラリのマニュアルを編集して作ったのよ。
- GCCでは、関数のプロトタイプ宣言がなくてもいいんだけど、引数の
- エラーチェックができなくなるから、自作したんだそうよ。これは、あ
- なたのほうで、その行を消すか、それに相当するヘッダファイルをつく
- るかしてね。
- それと、リンクで失敗したときは、必要なファイルと一緒にリンクし
- ているかどうかチェックしてね。ソースファイルの始めに書かれている
- から。
-
-
- Chapt.12 自作ソフトへの組み込みについて
-
- U) 応募したオブジェクトおよびそのソースは、使う前に私に向かって3
- 回祈るのよ。
-
- B) U、そうじゃないでしょ。
-
- U) ちぇーっ。まあ、真面目な話、使用に関してはフリーです。GCC以
- 外のコンパイラで使える関数は、各自のコンパイラで再コンパイルして
- ご利用ください。そして、お決まりどおり、使用によっていかなること
- がおこっても、作者は責任を負いません。また、バクを修正する義務も
- 持ちません。が、積極的にバグは退治していきたいので、報告して頂け
- ると嬉しいです。作者はNIFTYに加入しているので、どうぞお気軽
- にメールをくださいな。
-
- S) あら、Uにしては、ずいぶんと言葉が丁寧ね。バグでもあるのかしら。
-
- U) あんた、そんなこと言ってると後でお仕置きよ。
-
- S) えっ。わたしなにか言ったっけ。
-
- U) 逃げたわね。
-
- B) それじゃ、この辺で、お別れですね。ご感想、ご意見、ご要望があり
- ましたら、富士通経由または、電子メールにて、御寄せ下さい。それが
- 作者の喜びであり、プログラムをよりよいものにするために必要なので
- すから。それではまた逢う日まで、
-
- U・B・S)さようなら。
-
-